package com.laijiale.service;

import com.laijiale.dto.*;
import com.laijiale.entity.User;
import com.laijiale.result.Result;
import com.laijiale.vo.LoginVO;
import com.laijiale.vo.RoleSimpleListVO;
import com.laijiale.vo.UserSimpleListVO;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import com.laijiale.entity.User;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * 用户表 服务层。
 *
 * @author laijiale
 * @since 2024-12-22
 */
public interface UserService extends IService<User> {
    boolean insert(UserInsertDTO dto);
    User select(Long id);
    boolean update(UserUpdateDTO dto);
    boolean delete(Long id);
    boolean deleteBatch(List<Long> ids);
    Page<User> page(UserPageDTO dto);

    /**
    *按主键查询该用户的全部角色ID列表

     @return该该用户的全部角色ID列表
    **/
    List<Long> listRoleIds(Long id);
    /**
    *按主键修改该用户的角色列表
     *  @Param dto用户修改DTO
    * */

    boolean updateRoles(UserUpdateDTO dto);


    boolean resetPassword(Long id);

    /**
     * 修改用户密码
     *
     * @param dto 修改密码DTO
     * @return true修改成功，false修改失败
     */
    boolean updatePassword(UserUpdatePasswordDTO dto);

        /**
                *统计用户数据
    @return 统计结果
    **/
    Map<String, Object> statistics();
/**
 用户ExceL记录
 @return 全查用户记录，ExceL类型的数据
  * **/
 List<UserExcelDTO> excel();
    /**根据手机号码生成一个随机的4位短信验证码
    @param phone手机号码
    @return**/
    //一个随机的4位短信验证码
    String getVcode(String phone);
    /**根据手机号码＋验证码登录
    @paramdto用户登录DTO
    @return 返回登陆成功的用户记录，Token令牌以及菜单列表
    **/
    LoginVO loginByPhone(LoginByPhoneDTO dto);

    /**
     * 用户账号密码登录
     * @param dto 账号密码
     * @return 返回登陆成功的用户记录，Token令牌以及菜单列表
     */
    LoginVO login(LoginDTO dto);

    /**根据用户主键上传头像
    @param avatarFile头像文件
    @param id
            用户主键
    @return 返回新文件名
    */
    Result<String> uploadAvatar(MultipartFile avatarFile, Long id);

    List<UserSimpleListVO> simpleList();


}
